// 引入 wechat-http
import http from 'wechat-http'

// 配置基地址
http.baseURL = 'https://live-api.itheima.net'

// 配置请求拦截器
http.intercept.request = (config) => {
  // config：请求相关的信息
  // console.log(config);
  // 统一为每个接口添加请求头 Authorization: `Bearer ${token}`
  const token = getApp().token
  // token存在 并且 调用的接口不是刷新token接口
  if (token && !config.url.includes('/refreshToken')) {
    config.header = config.header || {}
    config.header.Authorization = token
  }
  return config
}

// 配置响应拦截器
http.intercept.response = async (res) => {
  // console.log(res);
  // 1. token失效时，做刷新token的操作
  if (getApp().token && res.statusCode === 401) {
    // 2. refreshToken 失效，跳转到登录页
    if (res.config.url.includes('/refreshToken')) {
      // 跳转到登录页
      const pageStack = getCurrentPages()
      const currentPage = pageStack[pageStack.length - 1]
      wx.redirectTo({
        url: `/pages/login/index?returnUrl=/${currentPage.route}`
      })
      return res.data
    }

    // 调用刷新token接口
    const result = await wx.http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: getApp().refreshToken
      }
    })
    // 存储token
    wx.setStorageSync('token', `Bearer ${result.data.token}`)
    getApp().token = `Bearer ${result.data.token}`
    // 存储refreshToken
    wx.setStorageSync('refreshToken', `Bearer ${result.data.refreshToken}`)
    getApp().refreshToken = `Bearer ${result.data.refreshToken}`

    // 3. 无感请求：将用户原本要调用的接口(401)，再调用一次，获取数据并返回
    const resResult = await wx.http(res.config)
    return resResult
  }

  // 剥离无效数据
  return res.data
}

// 将 http 挂载到全局对象 wx 上
wx.http = http
